Click here to return.
Blocking/Non-blocking Assignment (last edit: 24. November 2024)
Definition
In a Blocking assignment in a clocked process the value is transferred when the process ends
In a Non-blocking assignment in a clocked process the value is transferred immediately
Syntax
        blocking_assignment ::= variable_lvalue = delay_or_event_control expression
                              | hierarchical_dynamic_array_variable_identifier = dynamic_array_new
                              | [ implicit_class_handle . | class_scope | package_scope ] hierarchical_variable_identifier

        nonblocking_assignment ::= variable_lvalue <= [ delay_or_event_control ] expression
        
Placement
Rules
Things to remember
Nonblocking and Blocking Assignments can be mixed in the same always block.
However you must be careful when doing this!
It’s actually up to the synthesis tools to determine whether a blocking assignment within a clocked always block will infer a Flip-Flop or not.
If it is possible that the signal will be read before being assigned, the tools will infer sequential logic. If not, then the tools will generate combinational logic.
Therefore it is best just to separate your combinational and sequential code as much as possible.
Synthesis
Example
See Also